# vscp_type

token: VSCP_TYPE_DIAGNOSTIC_STACK_FAIL
description:
  Stack failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n\n


token: VSCP_TYPE_DIAGNOSTIC_LIN_FAIL
description:
  LIN bus failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n\n


token: VSCP_TYPE_DIAGNOSTIC_UART_FAIL
description:
  UART failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_UNHANDLED_INT
description:
  Unhandled interrupt has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_MEMORY_FAIL
description:
  Memory failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_VARIABLE_RANGE
description:
  Variable range failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_WDT
description:
  Watch Dog Timer (WDT) failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_EEPROM_FAIL
description:
  EEPROM failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_ENCRYPTION_FAIL
description:
  Encryption failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_BAD_USER_INPUT
description:
  Bad user input failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_DECRYPTION_FAIL
description:
  Decryption failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_NOISE
description:
  Noise has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_BOOTLOADER_FAIL
description:
  Boot loader failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n\n


token: VSCP_TYPE_DIAGNOSTIC_PROGRAMFLOW_FAIL
description:
  Program flow failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_RTC_FAIL
description:
  Real Time Clock (RTC) failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_SYSTEM_TEST_FAIL
description:
  System test failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_SENSOR_FAIL
description:
  Sensor failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_SAFESTATE
description:
  Safe state entered has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_SIGNAL_IMPLAUSIBLE
description:
  Signal implausible has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_STORAGE_FAIL
description:
  Storage fail has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_SELFTEST_FAIL
description:
  Self test OK has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_ESD_EMC_EMI
description:
  ESD/EMC/EMI failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_TIMEOUT
description:
  Timeout has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_LCD_FAIL
description:
  LCD failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_TOUCHPANEL_FAIL
description:
  Touch panel failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_NOLOAD
description:
  No load has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_COOLING_FAIL
description:
  Cooling failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_HEATING_FAIL
description:
  Heating failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_TX_FAIL
description:
  Transmission failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_RX_FAIL
description:
  Receiption failure has been diagnosed.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_EXT_IC_FAIL
description:
  A failure in an external IC circuit has been detected.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_CHARGING_ON
description:
  Indicates that charging (of a battery for example) is active.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_DIAGNOSTIC_CHARGING_OFF
description:
  Indicates that charging (of a battery for example) is inactive.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/subdevices within a module.                            | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_SUCCESS
description:
  This error message is used to report success, that is no error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_ERROR
description:
  This error message is used to indicate an error condition.\n\n | Data byte | Description | \n | :---------: | ----------- | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_CHANNEL
description:
  This error message is used to indicate a (communication) channel problem.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_FIFO_EMPTY
description:
  This error message is used to indicate a fifo empty problem.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_FIFO_FULL
description:
  This error message is used to indicate a fifo full problem.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_FIFO_SIZE
description:
  This error message is used to indicate a fifo size problem.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_FIFO_WAIT
description:
  This error message is used to indicate a fifo wait problem.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_GENERIC
description:
  This error message is used to indicate a generic error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_HARDWARE
description:
  This error message is used to indicate a hardware error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_INIT_FAIL
description:
  This error message is used to indicate a initialization error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_INIT_MISSING
description:
  This error message is used to indicate a missing initialization error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_INIT_READY
description:
  This error message is used to indicate a initialization ready error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_NOT_SUPPORTED
description:
  This error message is used to indicate a not supported error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_OVERRUN
description:
  This error message is used to indicate an overrun error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_RCV_EMPTY
description:
  This error message is used to indicate a receiver empty error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_REGISTER
description:
  This error message is used to indicate a register error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_TRM_FULL
description:
  This error message is used to indicate a transmitter full error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_LIBRARY
description:
  This error message is used to indicate a library error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_PROCADDRESS
description:
  This error message is used to indicate a procedural address error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_ONLY_ONE_INSTANCE
description:
  This error message is used to indicate an only one instance error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_SUB_DRIVER
description:
  This error message is used to indicate a sub driver error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_TIMEOUT
description:
  This error message is used to indicate a timeout error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_NOT_OPEN
description:
  This error message is used to indicate a not open error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_PARAMETER
description:
  This error message is used to indicate a parameter error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_MEMORY
description:
  This error message is used to indicate a memory error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_INTERNAL
description:
  This error message is used to indicate a internal error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_COMMUNICATION
description:
  This error message is used to indicate a communication error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_USER
description:
  This error message is used to indicate a user error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_PASSWORD
description:
  This error message is used to indicate a password error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_CONNECTION
description:
  This error message is used to indicate a connection error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_INVALID_HANDLE
description:
  This error message is used to indicate a invalid handle error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_OPERATION_FAILED
description:
  This error message is used to indicate an operation failed error.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_BUFFER_SMALL
description:
  This error message is used to indicate that the supplied buffer is to small to fit content.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_ITEM_UNKNOWN
description:
  This error message is used to indicate that the requested item (remote variable) is unknown.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_NAME_USED
description:
  This error message is used to indicate that the name is already in use.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_DATA_WRITE
description:
  This error message is used to indicate an error when writing data.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. | \n


token: VSCP_TYPE_ERROR_ABORTED
description:
  This error message is used to indicate a stopped or an aborted operation.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. |


token: VSCP_TYPE_ERROR_INVALID_POINTER
description:
  This error message is used to indicate a pointer with an invalid value.\n\n | Data byte | Description                                                                                       | \n | :---------: | -----------                                                                                       | \n | 0         | index. Often used as an index for channels/sub devices within a module.                           | \n | 1         | Zone for which event applies to (0-255). 255 is all zones.                                        | \n | 2         | Sub-zone for which event applies to (0-255). 255 is all sub-zones.                                | \n | 3-7       | Can be present or not be present. If present the bytes give additional user specific information. |


token: VSCP_TYPE_LOG_MESSAGE
description:
  Message for Log. Several frames have to be sent for a event that take up more then the five bytes which is the maximum for each frame. In this case the zero based index (byte 2) should be increased for each frame. \n\n | Byte | Description            | \n | :----: | -----------            | \n | 0    | ID for event.          | \n | 1    | Log level for message. | \n | 2    | Idx for this message.  | \n | 3-7 (511)  | Message.         |\n\n A **level II** node can use the full 512 byte message body. \n\n Log levels are typically\n\n | Byte | Description     | \n | :----: | -----------   | \n | 0    | Emergency.      | \n | 1    | Alert.          | \n | 2    | Critical.       | \n | 3    | Error.          | \n | 4    | Warning.        | \n | 5    | Notice.         | \n | 6    | Informational.  | \n | 7    | Debug.          | \n | 7    | Verbose.        | \n\n but one can use any schema that makes sense (or not).


token: VSCP_TYPE_LOG_LEVEL
description:
  Set level for logging. \n\n | Byte | Description                  | \n | :----: | -----------                  | \n | 0    | ID for log byte 0 Log level. | \n


token: VSCP2_TYPE_PROTOCOL_READ_REGISTER
description:
  Read a Level II register from the 32-bit register space\n\nBe aware that a node may send several read/write response events to fullfil a read request.\n\n | Byte       | Description                                      | \n | ----       | -----------                                      | \n | Byte 0-15  | Contains the GUID of the target node (MSB->LSB). | \n | Byte 16-19 | Register to read (or start index), (MSB->LSB).   | \n | Byte 20-21 | Number of registers to read (max 508).           | \n\n\n


token: VSCP2_TYPE_PROTOCOL_WRITE_REGISTER
description:
  Write a Level II register to the 32.bit register space\n\n Care should be taken not to write to much data at the same time as there may be nodes\n that can't handle a full 512 byte frame. Better to seperate srite requests in bunches\n of 100 bytes or so.\n\n Also be aware that a node may send several read/write response events to fullfil a write request.\n \n | Byte       | Description                                      | \n | ----       | -----------                                      | \n | Byte 0-15  | Contains the GUID of the target node (MSB->LSB). | \n | Byte 16-19 | Register to write (or start index), (MSB->LSB).  | \n | Byte 20…   | Data to write to register(s) (max 512-16-4 bytes).  | \n\n\n


token: VSCP2_TYPE_PROTOCOL_READ_WRITE_RESPONSE
description:
  This is the response from a read or a write. Note that the data is returned in both cases and can be checked for validity. \n\nThere may be nodes that can not send a full level II frame and therefore will reply with more than one of this\nevent to fullfil the request.\n\n | Byte      | Description                               | \n | ----      | -----------                               | \n | Byte 0-3  | Start register for register read/written. | \n | Byte 4…   | Data read/written.                        | \n \n Data read/written can be a maximum of 512-4 = 508 bytes for read and 512-16-4 = 492 bytes for a write response.\n


token: VSCP2_TYPE_PROTOCOL_HIGH_END_SERVER_CAPS
description:
  Recommended to be implemented by all Level II devices and be sent out at least once every 60 second.\n\n | Data byte | Description                                 |\n | :----: |-----------                                     |\n | 0         | VSCP server 64-bit capability code MSB      |\n | 1         | VSCP server 64-bit capability code          |\n | 2         | VSCP server 64-bit capability code          |\n | 3         | VSCP server 64-bit capability code          |\n | 4         | VSCP server 64-bit capability code          |\n | 5         | VSCP server 64-bit capability code          |\n | 6         | VSCP server 64-bit capability code          |\n | 7         | VSCP server 64-bit capability code LSB      |\n | 8-23      | GUID for server                             |\n | 24-39     | For IPv4 or IPv6 IP address or other transport id identifier (MSB first). Note that this info is often already part of the GUID. |\n | 40-103    | 64 byte max zero terminated utf8 encoded name for this server. Blank if no name set. |\n | 104..     | Non standard port info for services. Not needed if the standard port is used.        |\n\n### Capability code\n\nDescription of bit-usage for VSCP server 64-bit **capability code**. A bit should be set only if the service is active.\n\n | Bit       | Usage                   |\n | :----:       | -----                |\n | 63 | Node supports VSCP remote variables. |\n | 62 | Node have a standard decision matrix. |\n | 61 | Node is a multi interface node (tcp/ip 'interface' command list interfaces). |\n | Bit 16-60 | Reserved.               |\n | Bit 15    | Have VSCP TCP server with VCSP link interface.  |\n | Bit 14    | Have VSCP UDP server.   |\n | Bit 13    | Have VSCP Multicast announce interface. |\n | Bit 12    | Have VSCP raw Ethernet. |\n | Bit 11    | Have Web server.        |\n | Bit 10    | Have VSCP Websocket interface . |\n | Bit 9     | Have VSCP REST interface. |\n | Bit 8     | Have VSCP Multicast channel support. |\n | Bit 7     | Reserved.                 |\n | Bit 6     | IP6 support.              |\n | Bit 5     | IP4 support.              |\n | Bit 4     | SSL support.              |\n | Bit 3     | Accepts two or more simultaneous connections on TCP/IP interface. A limited device may only accept one connection.   |\n | Bit 2     | Support AES256 encryption. |\n | Bit 1     | Support AES192 encryption. |\n | Bit 0     | Support AES128 encryption. |\n\n**For programmers:** Bits are defined in vscp.h.\n\n### Non standard ports\n\nNon standard port definitions. Each consist of three bytes.\n | Byte | Description                                                                                                     |\n | :----: | -----------                                                                                                   |\n | 0    | 0-63 Identify the service from the bit number (see bit usage). Offset zero. Bit 7 is set if encryption is used. |\n | 1    | Port MSB byte                                                                                                   |\n | 2    | Port LSB byte                                                                                                   |\n\n### Example\n\n**Example:** The standard TCP/IP server is on port **9598** if it has been moved to port **32000** the three bytes will be\n\n | Byte | Description                                       |\n | :----: | -----------                                     |\n | 0    | 15 for bit 15 which is the TCP/IP server          |\n | 1    | 0xD4 which is the most significant byte of 32000  |\n | 3    | 0x00 which is the least significant byte of 32000 |\n


token: VSCP2_TYPE_PROTOCOL_WHO_IS_THERE_RESPONSE
description:
  This defines the response from a Level II node for a [CLASS1.PROTOCOL, Type=32, Who is there?](./class1.protocol.md#type31) event.\n\n | Byte  | Description                                       |\n | :----:  | -----------                                     |\n | 0-15  | GUID for node                                     |\n | 16-47 | MDF of node                                       |\n\n


token: VSCP2_TYPE_PROTOCOL_GET_MATRIX_INFO_RESPONSE
description:
  This defines the response from a Level II node for a [CLASS1.PROTOCOL, Type=33, VSCP_TYPE_PROTOCOL_GET_MATRIX_INFO](./class1.protocol.md#type34) event.\n\n | Byte   | Description    |\n | :----: | -----------    |\n | 0-15   | GUID for node  |\n | 16     | DM row size    |\n | 17     | DM number of rows |\n | 18-21  | Register start for DM |\n\n


token: VSCP2_TYPE_PROTOCOL_GET_EMBEDDED_MDF_RESPONSE
description:
  Get embedded MDF of device. This defines the response from a Level II node for a [CLASS1.PROTOCOL, Type=35, VSCP_TYPE_PROTOCOL_GET_EMBEDDED_MDF](./class1.protocol.md#type35) event.\n\n | Byte   | Description  |\n | :----: | -----------  |\n | 0,1    | Index        |\n | 2,3    | Total number of frames |\n | 4-...  | MDF data     |\n\n Each packet can hold a maximum of 508 bytes. The first byte is the index of the MDF. The second byte is the total number of rows. The following bytes are the MDF data.\n\n


token: VSCP2_TYPE_PROTOCOL_GET_EVENT_INTEREST_RESPONSE
description:
  Get events of interest. This defines the response from a Level II node for a [CLASS1.PROTOCOL, Type=40, VSCP2_TYPE_PROTOCOL_GET_EVENT_INTEREST](./class1.protocol.md#type40) event.\n\n | Byte     | Description  |\n | :----:   | -----------  |\n | 0,1      | class 1      |\n | 2,3      | type 1       |\n | 4,5      | class 2      |\n | 6,7      | type 2       |\n | ....     | ....         |\n | 508,509  | class n      |\n | 510,511  | type n       |\n\n The response is a packet with class/type pairs. One frame can hold a maximum of 256 pairs. If more is needed send multiple frames. Type can be set to zero to indicate ALL types of that class.\n\n A node that is interested in everything just send a [CLASS2.PROTOCOL, Type=41 (Get event interest response)](./class2.protocol.md#type41) with no data if asked to provide that information.


token: VSCP2_TYPE_INFORMATION_TOKEN_ACTIVITY
description:
  This event is used for cards, RFID's, iButtons and other identification devices. The event is generated when the token device is attached/detached to/from the system. \n\n | Byte | Description                | \n | :----: | -----------                | \n | 0    | Event code.                | \n | 1    | Zone.                      | \n | 2    | Sub-zone.                  | \n | 3    | Token device type code     | \n | 4-7  | Reserved.                  | \n | 8..  | Unique ID of token-device. | \n\n##### Event codes\n\n | Code  | Description           | \n | :----:  | -----------           | \n | 0     | Touched and released. | \n | 1     | Touched.              | \n | 2     | Released.             | \n | 3-254 | Reserved.             | \n | 255   | Error.                | \n\n##### Token device type \n\n | Device type | Description                                                                                                                                                          | \n | :-----------: | -----------                                                                                                                                                          | \n | 0           | Unknown Token.                                                                                                                                                       | \n | 1           | iButton 64-bit token.                                                                                                                                                | \n | 2           | RFID Token.                                                                                                                                                          | \n | 3           | Philips mifare® RFID Token.                                                                                                                                         | \n | 4-8         | Reserved.                                                                                                                                                            | \n | 9           | ID/Credit card.                                                                                                                                                      | \n | 10-15       | Reserved.                                                                                                                                                            | \n | 16          | Biometri device 256-bits.                                                                                                                                            | \n | 17          | Biometri device. 64-bits.                                                                                                                                            | \n | 18          | Bluetooth device. 48-bits                                                                                                                                            | \n | 19          | GSM IMEI code (International Mobile Equipment Identity) AA-BBBBBB-CCCCCC-D packed in 64 bits. [https://en.wikipedia.org/wiki/IMEI](https://en.wikipedia.org/wiki/IMEI) | \n | 20          | GSM IMSI code (International Mobile Subscriber Identity) packed in 64 bits. [https://en.wikipedia.org/wiki/IMSI](https://en.wikipedia.org/wiki/IMSI)                   | \n | 21-255      | Reserved.                                                                                                                                                          |


token: VSCP2_TYPE_INFORMATION_HEART_BEAT
description:
  A level II node is recommended to send this event at least once a minute to indicate that it is live and well. The implementation **is mandatory**. Recommended interval is 30-60 seconds but in a node that need to sleep longer to save resources a longer interval can be used.\n\n | Byte | Description                 | \n | :----: | -----------                 | \n | 0-63 | Real text name of the node or no data meaning no name is available. | \n\nThis event is sent by all level nodes even if they are just a client which can connect to a server but not accept connections itself. \n\nThe name part is optional. If no name set datalength to zero.\n


token: VSCP2_TYPE_INFORMATION_PROXY_HEART_BEAT
description:
  This event, which it is advised that all nodes should implement, can be sent by a server that have lower end nodes connected to it at different interfaces. This can be level II or level I nodes. \n\n | Byte    | Description                                                             | \n | :----:    | -----------                                                             | \n | 0-15    | Real GUID for node (not interface GUID)                                 | \n | 16-31   | Reserved                                                                | \n | 32-47   | GUID for interface on server the node is connected to.                  | \n | 48      | Interface Level (0=Level I, 1=Level II)                                 | \n | 49-63   | Reserved                                                                | \n | 64-127  | Real text name of node (if any). Set to all zero if not available.      | \n | 128-191 | Real text name of interface (if any). Set to all zero if not available. | \n\nIf the real GUID for a node is not known (for example discovery is in progress or have failed) bytes 0-15 should be set to zero. This is true for a node that has been configured as a known node but where the system has not yet fetched information from the node.\n


token: VSCP2_TYPE_INFORMATION_CHANNEL_ANNOUNCE
description:
  This event is used by multicast nodes to announce which port(=channel) they communicate on. This may be something they want or not want to share with the rest of the world for security reasons. Therefore this is an optional event. \n\nIf several channels is used several events is sent.\n\nTypically this event is sent on the multicast announce channel\n\n | Byte | Description    | \n | :----: | -----------    | \n | 0    | MSB of channel | \n | 1    | LSB of channel | \n | 2-5  | Reserved       | \n


token: VSCP2_TYPE_TEXT2SPEECH_TALK
description:
  Talk some text out on a device.\n\n | Byte | Description               | \n | :----: | -----------               | \n | 0-1  | Zone to talk in.          | \n | 2-3  | Sub-zone to talk in.      | \n | 4    | Relative volume (0-100%). | \n | 5-7  | Reserved.                 | \n | 9..  | Text to speak.            | \n


token: VSCP2_TYPE_HLO_COMMAND
description:
  High Level Object (HLO) event is a command/response or other packed object sent to a device or sent as a response from a device. Content can be XML, JSON, character separated, BASE64, etc.\n\nCommand and response packages are separated into different VSCP types to be easier to filter even if this is not strictly needed. \n\nVSCP uses some of the contents in HLO events to pack driver configuration and other things. Therefore there is a restriction on tags used by user in that all tags prefixed with "vscp-" belongs to VSCP and should not be used by other applications. Apart from that naming is completely free. With XML content this restriction only applies to the highest level tag. For example\n\n```xml\n<vscp-cmd />\n```\n\nis restricted. But\n\n```xml\n<vscp-cmd no-restrictions-on-attributes-here="">\n<no-restriction-on-tags-here />\n</vscp-cmd>\n```\n\nFor JSON the restriction does not apply for sub object.\n\nThis event is not mandatory to implement by a device.\n\n##### Payload content \n\n | Byte   | Description |\n | :----: | ----------- |\n | 0-15  | GUID for node that is addressed |\n | 16 | Type + Encryption |\n | 17-511 | Variable length high level payload. For type=0 first byte is separation character. |\n\n##### Type (bits 7,6,5,4)\n\n | Type  | Description |\n | :----:  | ----------- |\n | 0 | UTF8 data where items is separated with a char specified by the first byte in the payload. Typical examples are comma separated, semicolon separated, etc, data |\n| 1 | XML encoded data |\n| 2 | JSON encoded data |\n| 3 | BASE64 encoded data |\n| 4-14 | Undefined |\n| 15 | User specified content |\n\n##### Encryption (bits 3,2,1,0)\n\n | Type  | Description |\n | :----:  | ----------- |\n | 0 | No encryption |\n | 1 | AES128 |\n | 2 | AES192 |\n | 3 | AES256 |\n  | 4-254 | Reserved |\n | 255 | User defined encryption |\n\n\nEncrypted content is encrypted with AES128/AES192/AES256 CBC. The encrypted content is sent with a 16-byte IV appended to it meaning that the actual payload can be max 479 bytes (512-16 (GUID)-1 (type)-16 (IV)).\n\nMulti frame commands is first collected (all events that make up the command is read) then the IV is extracted from the last 16-bytes and after that the decryption of the rest of the data is carried out.\n\n


token: VSCP2_TYPE_HLO_RESPONSE
description:
  High Level Object (HLO) event is a command/response or other packed object sent to a device or sent as a response from a device. Content can be XML, JSON, character separated, BASE64, etc.\n\nCommand and response packages are separated into different VSCP types to be easier to filter even if this is not strictly needed.  \n\nVSCP uses some of the contents in HLO events to pack driver configuration and other things. Therefore there is a restriction on tags used by user in that all tags prefixed with "vscp-" belongs to VSCP and should not be used by other applications. Apart from that naming is completely free. With XML content this restriction only applies to the highest level tag. For example\n\n```xml\n<vscp-resp />\n```\n\nis restricted. But\n\n```xml\n<vscp-resp no-restrictions-on-attributes-here="">\n<no-restriction-on-tags-here />\n</vscp-resp>\n```\n\nFor JSON the restriction does not apply for sub object.\n\nThis event is not mandatory to implement by a device.\n\n##### Payload content\n\n | Byte  | Description |\n | :----:  | ----------- |\n | 0-15  | GUID for node that is addressed |\n | 16 | Type + Encryption |\n | 17-511 | Variable length high level payload. For type=0 first byte is separation character. |\n\n##### Type (bits 7,6,5,4)\n\n | Type  | Description |\n | :----:  | ----------- |\n | 0 | UTF8 data where items is separated with a char specified by the first byte in the payload. Typical examples are comma separated, semicolon separated, etc, data |\n| 1 | XML encoded data |\n| 2 | JSON encoded data |\n| 3 | BASE64 encoded data |\n| 4-14 | Undefined |\n| 15 | User specified content |\n\n##### Encryption (bits 3,2,1,0)\n\n | Type  | Description |\n | :----:  | ----------- |\n | 0 | No encryption |\n | 1 | AES128 |\n | 2 | AES192 |\n | 3 | AES256 |\n\nEncrypted content is encrypted with AES128/AES192/AES256 CBC. The encrypted content is sent with a 16-byte IV appended to it meaning that the actual payload can be max 479 bytes (512-16 (GUID)-1 (type)-16 (IV)).\n\nMulti frame commands is first collected (all events that make up the command is read) then the IV is extracted from the last 16-bytes and after that the decryption of the rest of the data is carried out.\n\n


token: VSCP2_TYPE_SECURITY_SETKEY
description:
  Set encryption key for a node. The payload data is encrypted from byte 1 to the payload length. The first first byte holds the encryption code as of the definition in the VSCP specification (and vscp.h).\n\nEncrypted content is encrypted with AES128/AES192/AES256 CBC. The encrypted content is sent with a 16-byte IV appended to it meaning that the actual payload can be max 479 bytes (512-16 (GUID)-1 (type)-16 (IV)).\n\n##### Payload content \n\n | Byte   | Description |\n | :----: | ----------- |\n | 0 | Encryption code in low nibble. High nibble is reserved for future use. |\n | 1 | Reserved for future use. |\n | 2-17  | GUID for node that the key is intended for.  (All zero GUID is all nodes.) |\n | 18-511 | Key (any length) + (16 byte) iv. |\n\nNote that key length is application/protocol dependent.\n\n##### Encryption (bits 3,2,1,0)\n\n | Code   | Description |\n | :----: | ----------- |\n | 0 | No encryption |\n | 1 | AES-128 |\n | 2 | AES-192 |\n | 3 | AES-256 |\n | 4-254 | Reserved |\n | 255 | User defined encryption |


token: VSCP2_TYPE_VSCPD_GENERAL
description:
  ## General Event.\n\n| Data byte | Description |\n| :----: | ----------- |\n| 0-15 | GUID for driver (MSB->LSB). |\n\n


token: VSCP2_TYPE_VSCPD_LOOP
description:
  Reserved\n\n| Data byte | Description |\n| :----: | ----------- |\n| 0-15 | GUID for driver (MSB->LSB). |\n


token: VSCP2_TYPE_VSCPD_PAUSE
description:
  The machine/daemon is going to a pause state.\n\n| Data byte | Description |\n| :----: | ----------- |\n| 0-15 | GUID for driver (MSB->LSB). |\n


token: VSCP2_TYPE_VSCPD_ACTIVATE
description:
  The machine/daemon is going from a pause state. \n\n| Data byte | Description |\n| :----: | ----------- |\n| 0-15 | GUID for driver (MSB->LSB). |\n


token: VSCP2_TYPE_VSCPD_STARTING_UP
description:
  The machine/daemon is starting up. This is the first event sent after a machine start up. \n\n| Data byte | Description |\n| :----: | ----------- |\n| 0-15 | GUID for driver (MSB->LSB). |\n


token: VSCP2_TYPE_VSCPD_SHUTTING_DOWN
description:
  The machine/daemon is shutting down. This is the last event sent before a machine is shutting off.  \n\n| Data byte | Description |\n| :----: | ----------- |\n| 0-15 | GUID for driver (MSB->LSB). |\n


token: VSCP2_TYPE_VSCPD_DRV3_START
description:
  This event is used by the VSCP daemon to stop a Level III driver.\n\n| Data byte | Description |\n | :----: | ----------- |\n | 0-15 | GUID for driver (MSB->LSB). |\n\n\n


token: VSCP2_TYPE_VSCPD_DRV3_STOP
description:
  This event is used by the VSCP daemon to pause execution of a Level III driver.\n\n| Data byte | Description |\n | :----: | ----------- |\n | 0-15 | GUID for driver (MSB->LSB). |\n


token: VSCP2_TYPE_VSCPD_DRV3_RESUME
description:
  This event is used by the VSCP daemon to resume execution of a Level III driver.\n\n| Data byte | Description |\n | :----: | ----------- |\n | 0-15 | GUID for driver (MSB->LSB). |


token: VSCP2_TYPE_VSCPD_DRV3_RESTART
description:
  This event is used by the VSCP daemon to restart a Level III driver.\n\n| Data byte | Description |\n | :----: | ----------- |\n | 0-15 | GUID for driver (MSB->LSB). |\n\n


token: VSCP2_TYPE_VSCPD_DRV3_CONFIG
description:
  This event is used by the VSCP daemon to (re)configure a Level III driver.\n\nEvent data is GUID for driver followed by a null terminated UTF8 string that is the path to a XML configuration string.\n\n| Data byte | Description |\n | :----: | ----------- |\n | 0-15 | GUID for driver (MSB->LSB). |\n | 16 -| NULL terminated path to config file |\n \n


# vscp_render

type: vscpworks
variables:
  crc8:        function() { return (e.vscpData[0]); }   {{{newline}}}                            time_epoch:  function() { return (e.vscpData[1]<<24 + e.vscpData[2]<<16 + e.vscpData[3]<<8 + e.vscpData[4]); } {{{newline}}}

template:
  {{{lbl-start}}}CRC8: {{{lbl-end}}} {{{val-start}}}{{{crc8}}}{{{val-end}}}{{{newline}}}                           {{{lbl-start}}}Time(UTC): {{{lbl-end}}} {{{val-start}}}{{{time_epoch}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  old-nickname: function() { return (e.vscpData[0]); } {{{newline}}}                            new-nickname: function() { return (e.vscpData[1]); } {{{newline}}}

template:
  {{{lbl-start}}}Old id: {{{lbl-end}}} {{{val-start}}}{{{old-nickname}}}{{{val-end}}}{{{newline}}}                           {{{lbl-start}}}New id(UTC): {{{lbl-end}}} {{{val-start}}}{{{new-nickname}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  nickname: function() { return e.vscpData[0]; }                         {{{newline}}}                     flags: function() { if (e.vscpData.length>1) return e.vscpData[1]; }          {{{newline}}}                     time-restart: function() { if (e.vscpData.length>2) return e.vscpData[2]; }   {{{newline}}}                     flag_reset_keep_nickname: function() { if ( (e.vscpData.length > 2) && (e.vscpData[2] & 0x20) ) return "Reset device, keep id"; else return "Reset device, nickname discovery" } {{{newline}}}                     restore-default: function() { if ( (e.vscpData.length > 2) && (e.vscpData[2] & 0x40) ) return "Set persistent storage to default"; else return "Keep persistent storage"; }      {{{newline}}}                     go-idle:  function() { if ( (e.vscpData.length > 2) && (e.vscpData[2] & 0x80) ) return "Go idle. Do not start up again."; else return "Start normal"; }                          {{{newline}}}

template:
  {{{lbl-start}}}Current id: {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                           {{{lbl-start}}}Flags [opt]: {{{lbl-end}}} {{{val-start}}}{{{flags}}}{{{val-end}}}{{{newline}}}                           {{{ident}}}{{{lbl-start}}}Flag bit 5: {{{val-start}}}{{{lbl-end}}}{{{flag_reset_keep_nickname}}}{{{val-end}}}{{{newline}}}                           {{{ident}}}{{{lbl-start}}}Flag bit 6: {{{val-start}}}{{{lbl-end}}}{{{restore-default}}}{{{val-end}}}{{{newline}}}                           {{{ident}}}{{{lbl-start}}}Flag bit 7: {{{val-start}}}{{{lbl-end}}}{{{go-idle}}}{{{val-end}}}{{{newline}}}                           {{{lbl-start}}}Delay [opt]: {{{lbl-end}}} {{{val-start}}}{{{flags}}}{{{val-end}}} seconds{{{newline}}}


type: vscpworks
variables:
  nickname: function() { return e.vscpData[0]; }     {{{newline}}}                            register: function() { return e.vscpData[1]; }     {{{newline}}}

template:
  {{{lbl-start}}}Node id: {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                           {{{lbl-start}}}Register: {{{lbl-end}}} {{{val-start}}}{{{register}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  register: function() { return e.vscpData[0]; }     {{{newline}}}                     content: function() { return e.vscpData[1]; }      {{{newline}}}

template:
  {{{lbl-start}}}Register: {{{lbl-end}}} {{{val-start}}}{{{register}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Value: {{{lbl-end}}} {{{val-start}}}{{{content}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  nickname: function() { return e.vscpData[0]; }    {{{newline}}}                     register: function() { return e.vscpData[1]; }    {{{newline}}}                     content: function() { return e.vscpData[2]; }     {{{newline}}}

template:
  {{{lbl-start}}}Node id: {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Register: {{{lbl-end}}} {{{val-start}}}{{{register}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Value: {{{lbl-end}}} {{{val-start}}}{{{content}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:bmlja25hbWU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVswXTsgfQogICAgICAgICAgICAgICAgICAgIGFsZ29yaXRobTogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzFdOyB9CiAgICAgICAgICAgICAgICAgICAgZ3VpZDA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVsyXTsgfQogICAgICAgICAgICAgICAgICAgIGd1aWQzOiBmdW5jdGlvbigpIHsgcmV0dXJuIGUudnNjcERhdGFbM107IH0KICAgICAgICAgICAgICAgICAgICBndWlkNTogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzRdOyB9CiAgICAgICAgICAgICAgICAgICAgZ3VpZDc6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVs1XTsgfQogICAgICAgICAgICAgICAgICAgIHBhZ2VzZWxlY3QtbXNiOiBmdW5jdGlvbigpIHsgcmV0dXJuIGUudnNjcERhdGFbNl07IH0KICAgICAgICAgICAgICAgICAgICBwYWdlc2VsZWN0LWxzYjogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzddOyB9CiAgICAgICAgICAgICAgICAgICAgcGFnZXNlbGVjdDogZnVuY3Rpb24oKSB7IHJldHVybiAoZS52c2NwRGF0YVs2XSZhbXA7JmFtcDs4ICsgZS52c2NwRGF0YVs3XSk7IH0KICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG0tc3RyOiBmdW5jdGlvbigpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS52c2NwRGF0YVsxXSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMDogCQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9ICZxdW90O1ZTQ1AgYWxnb3JpdGhtJnF1b3Q7IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDE6IAkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSAmcXVvdDtNaWNyb2NoaXAgUElDIGFsZ29yaXRobSZxdW90OyA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDEwOiAJCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gJnF1b3Q7QXRtZWwgQVZSIGFsZ29yaXRobSAwJnF1b3Q7IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MjA6IAkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSAmcXVvdDtOWFAgQVJNIGFsZ29yaXRobSAwJnF1b3Q7IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzA6IAkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSAmcXVvdDtTVCBBUk0gYWxnb3JpdGhtIDAmcXVvdDsgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gJnF1b3Q7VW5rbm93biZxdW90OyA7ICAgCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjsgfQ==

template:
  {{{lbl-start}}}Node id: {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Algorithm: {{{lbl-end}}} {{{val-start}}}{{{algorithm-str}}} [{{{algorithm}}}]{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}GUID[0]: {{{lbl-end}}} {{{val-start}}}{{{guid0}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}GUID[3]: {{{lbl-end}}} {{{val-start}}}{{{guid3}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}GUID[5]: {{{lbl-end}}} {{{val-start}}}{{{guid5}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}GUID[7]: {{{lbl-end}}} {{{val-start}}}{{{guid7}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Register page: {{{lbl-end}}} {{{val-start}}}{{{pageselect}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:Zmxhc2gtYmxvY2stc2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiAoIGUudnNjcERhdGFbMF0mYW1wOyZhbXA7MjQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZzY3BEYXRhWzFdJmFtcDsmYW1wOzE2ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS52c2NwRGF0YVsyXSZhbXA7JmFtcDs4ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS52c2NwRGF0YVszXSApOyB9CiAgICAgICAgICAgICAgICAgICAgbnVtYmVyLWJsb2NrczogZnVuY3Rpb24oKSB7IHJldHVybiAoICAgIGUudnNjcERhdGFbNF0mYW1wOyZhbXA7MjQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZzY3BEYXRhWzVdJmFtcDsmYW1wOzE2ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS52c2NwRGF0YVs2XSZhbXA7JmFtcDs4ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS52c2NwRGF0YVs3XSApOyB9

template:
  {{{lbl-start}}}Flash block size: {{{lbl-end}}} {{{val-start}}}{{{flash-block-size}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Available blocks: {{{lbl-end}}} {{{val-start}}}{{{number-blocks}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:YmxvY2s6IGZ1bmN0aW9uKCkgeyBpZiAoZS52c2NwRGF0YS5sZW5ndGgpIHJldHVybiAoIGUudnNjcERhdGFbMF0mYW1wOyZhbXA7MjQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZzY3BEYXRhWzFdJmFtcDsmYW1wOzE2ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS52c2NwRGF0YVsyXSZhbXA7JmFtcDs4ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS52c2NwRGF0YVszXSApOyB9CiAgICAgICAgICAgICAgICAgICAgbWVtdHlwZTogZnVuY3Rpb24oKSB7IGlmIChlLnZzY3BEYXRhLmxlbmd0aD40KSByZXR1cm4gZS52c2NwRGF0YVs0XTsgfQogICAgICAgICAgICAgICAgICAgIGJhbms6IGZ1bmN0aW9uKCkgeyBpZiAoZS52c2NwRGF0YS5sZW5ndGg+NSkgcmV0dXJuIGUudnNjcERhdGFbNV07IH0=

template:
  {{{lbl-start}}}Block : {{{lbl-end}}} {{{val-start}}}{{{block}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Memory type [opt]: {{{lbl-end}}} {{{val-start}}}{{{memtype}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Bank [opt]: {{{lbl-end}}} {{{val-start}}}{{{bank}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:ZGF0YTA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKCBlLnZzY3BEYXRhWzBdICk7IH0KICAgICAgICAgICAgICAgICAgICBkYXRhMTogZnVuY3Rpb24oKSB7IHJldHVybiAoIGUudnNjcERhdGFbMV0gKTsgfQogICAgICAgICAgICAgICAgICAgIGRhdGEyOiBmdW5jdGlvbigpIHsgcmV0dXJuICggZS52c2NwRGF0YVsyXSApOyB9CiAgICAgICAgICAgICAgICAgICAgZGF0YTM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKCBlLnZzY3BEYXRhWzNdICk7IH0KICAgICAgICAgICAgICAgICAgICBkYXRhNDogZnVuY3Rpb24oKSB7IHJldHVybiAoIGUudnNjcERhdGFbNF0gKTsgfQogICAgICAgICAgICAgICAgICAgIGRhdGE1OiBmdW5jdGlvbigpIHsgcmV0dXJuICggZS52c2NwRGF0YVs1XSApOyB9CiAgICAgICAgICAgICAgICAgICAgZGF0YTY6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKCBlLnZzY3BEYXRhWzZdICk7IH0KICAgICAgICAgICAgICAgICAgICBkYXRhNzogZnVuY3Rpb24oKSB7IHJldHVybiAoIGUudnNjcERhdGFbN10gKTsgfQ==

template:
  {{{lbl-start}}}Data : {{{lbl-end}}} {{{val-start}}}{{{data0}}} {{{data1}}} {{{data2}}} {{{data3}}} {{{data4}}} {{{data5}}} {{{data6}}} {{{data7}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:Y3JjOiBmdW5jdGlvbigpIHsgcmV0dXJuICggZS52c2NwRGF0YVswXSZhbXA7JmFtcDs4ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZzY3BEYXRhWzFdICk7IH0KICAgICAgICAgICAgICAgICAgICB3cml0ZS1wb2ludGVyOiBmdW5jdGlvbigpIHsgcmV0dXJuICggZS52c2NwRGF0YVswXSZhbXA7JmFtcDsyNCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudnNjcERhdGFbMV0mYW1wOyZhbXA7MTYgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZzY3BEYXRhWzJdJmFtcDsmYW1wOzggKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZzY3BEYXRhWzNdICk7IH0=

template:
  {{{lbl-start}}}CRC16 : {{{lbl-end}}} {{{val-start}}}{{{crc}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Write pointer: {{{lbl-end}}} {{{val-start}}}{{{write-pointer}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:ZXJyb3I6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKCBlLnZzY3BEYXRhWzBdOyB9ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB3cml0ZS1wb2ludGVyOiBmdW5jdGlvbigpIHsgcmV0dXJuICggZS52c2NwRGF0YVsxXSZhbXA7JmFtcDsyNCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudnNjcERhdGFbMl0mYW1wOyZhbXA7MTYgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZzY3BEYXRhWzNdJmFtcDsmYW1wOzggKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZzY3BEYXRhWzRdICk7IH0=

template:
  {{{lbl-start}}}Error code : {{{lbl-end}}} {{{val-start}}}{{{error}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Write pointer: {{{lbl-end}}} {{{val-start}}}{{{write-pointer}}}{{{val-end}}}{{{newline}}}


type: vscpworks
template: {{{lbl-start}}}Block # : {{{lbl-end}}} {{{val-start}}}{{{block}}}{{{val-end}}}{{{newline}}}
variables:
  BASE64:YmxvY2s6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKCBlLnZzY3BEYXRhWzBdJmFtcDsmYW1wOzI0ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS52c2NwRGF0YVsxXSZhbXA7JmFtcDsxNiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudnNjcERhdGFbMl0mYW1wOyZhbXA7OCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudnNjcERhdGFbM10gKTsgfQ==


type: vscpworks
variables:
  error: block: function() { return e.vscpData[0]; }         {{{newline}}}                            block: function() { return ( e.vscpData[1]&&24 +   {{{newline}}}                                                         e.vscpData[2]&&16 +   {{{newline}}}                                                         e.vscpData[3]&&8 +    {{{newline}}}                                                         e.vscpData[4] ); }            {{{newline}}}

template:
  {{{lbl-start}}}Error : {{{lbl-end}}} {{{val-start}}}{{{error}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Block # : {{{lbl-end}}} {{{val-start}}}{{{block}}}{{{val-end}}}{{{newline}}}


type: vscpworks
template: {{{lbl-start}}}CRC16 : {{{lbl-end}}} {{{val-start}}}{{{crc}}}{{{val-end}}}{{{newline}}}
variables:
  crc: function() { return ( e.vscpData[0]&&8 +   {{{newline}}}                                                         e.vscpData[1]; }           {{{newline}}}


type: vscpworks
variables:
  BASE64:aW5kZXg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVswXTsgfQogICAgICAgICAgICAgICAgICAgIGd1aWQ0OiBmdW5jdGlvbigpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSAmcXVvdDsmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGUudnNjcERhdGFbMF0pICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9ICZxdW90O0dVSURbMF09JnF1b3Q7ICArICgmcXVvdDswMCZxdW90OyArIGUudnNjcERhdGFbMV0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDsgR1VJRFsxXT0mcXVvdDsgKyAoJnF1b3Q7MDAmcXVvdDsgKyBlLnZzY3BEYXRhWzJdLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnF1b3Q7IEdVSURbMl09JnF1b3Q7ICsgKCZxdW90OzAwJnF1b3Q7ICsgZS52c2NwRGF0YVszXS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90OyBHVUlEWzNdPSZxdW90OyArICgmcXVvdDswMCZxdW90OyArIGUudnNjcERhdGFbNF0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gJnF1b3Q7R1VJRFs0XT0mcXVvdDsgICsgKCZxdW90OzAwJnF1b3Q7ICsgZS52c2NwRGF0YVsxXS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90OyBHVUlEWzVdPSZxdW90OyArICgmcXVvdDswMCZxdW90OyArIGUudnNjcERhdGFbMl0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDsgR1VJRFs2XT0mcXVvdDsgKyAoJnF1b3Q7MDAmcXVvdDsgKyBlLnZzY3BEYXRhWzNdLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnF1b3Q7IEdVSURbN109JnF1b3Q7ICsgKCZxdW90OzAwJnF1b3Q7ICsgZS52c2NwRGF0YVs0XS50b1N0cmluZygxNikpLnN1YnN0cigtMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9ICZxdW90O0dVSURbOF09JnF1b3Q7ICAgKyAoJnF1b3Q7MDAmcXVvdDsgKyBlLnZzY3BEYXRhWzFdLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnF1b3Q7IEdVSURbOV09JnF1b3Q7ICArICgmcXVvdDswMCZxdW90OyArIGUudnNjcERhdGFbMl0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDsgR1VJRFsxMF09JnF1b3Q7ICsgKCZxdW90OzAwJnF1b3Q7ICsgZS52c2NwRGF0YVszXS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90OyBHVUlEWzExXT0mcXVvdDsgKyAoJnF1b3Q7MDAmcXVvdDsgKyBlLnZzY3BEYXRhWzRdLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gJnF1b3Q7R1VJRFsxMl09JnF1b3Q7ICArICgmcXVvdDswMCZxdW90OyArIGUudnNjcERhdGFbMV0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDsgR1VJRFsxM109JnF1b3Q7ICsgKCZxdW90OzAwJnF1b3Q7ICsgZS52c2NwRGF0YVsyXS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90OyBHVUlEWzE0XT0mcXVvdDsgKyAoJnF1b3Q7MDAmcXVvdDsgKyBlLnZzY3BEYXRhWzNdLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnF1b3Q7IEdVSURbMTVdPSZxdW90OyArICgmcXVvdDswMCZxdW90OyArIGUudnNjcERhdGFbNF0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSAmcXVvdDtJbnZhbGlkIGluZGV4JnF1b3Q7OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHI7IAogICAgICAgICAgICAgICAgICAgIH0gIA==

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}GUID quartet : {{{lbl-end}}} {{{val-start}}}{{{guid4}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  nickname: function() { return e.vscpData[0]; }    {{{newline}}}                     offset: function() { return e.vscpData[1]; }      {{{newline}}}                     count: function() { return e.vscpData[2]; }       {{{newline}}}

template:
  {{{lbl-start}}}Node id : {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Page offset : {{{lbl-end}}} {{{val-start}}}{{{offset}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Count : {{{lbl-end}}} {{{val-start}}}{{{count}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  nickname: function() { return e.vscpData[0]; }    {{{newline}}}                     offset: function() { return e.vscpData[1]; }      {{{newline}}}                     data: function() {                                {{{newline}}}                         var str = "";                       {{{newline}}}                         if ( e.vscpData.length > 2 ) str += ("00" + e.vscpData[2].toString(16)).substr(-2);                  {{{newline}}}                         if ( e.vscpData.length > 3 ) str += " " + e.vscpData[3].toString(16)).substr(-2);                    {{{newline}}}                         if ( e.vscpData.length > 4 ) str += " " + ("00" + e.vscpData[4].toString(16)).substr(-2);  {{{newline}}}                         if ( e.vscpData.length > 5 ) str += " " + ("00" + e.vscpData[5].toString(16)).substr(-2);  {{{newline}}}                         if ( e.vscpData.length > 6 ) str += " " + ("00" + e.vscpData[6].toString(16)).substr(-2);  {{{newline}}}                         if ( e.vscpData.length > 7 ) str += " " + ("00" + e.vscpData[7].toString(16)).substr(-2);  {{{newline}}}                         return str;                      }

template:
  {{{lbl-start}}}Node id : {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Page offset : {{{lbl-end}}} {{{val-start}}}{{{offset}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Data : {{{lbl-end}}} {{{val-start}}}{{{data}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  seqno: function() { return e.vscpData[0]; }   {{{newline}}}                     data: function() {                            {{{newline}}}                         var str = "";                   {{{newline}}}                         if ( e.vscpData.length > 2 ) str += ("00" + e.vscpData[2].toString(16)).substr(-2);                  {{{newline}}}                         if ( e.vscpData.length > 3 ) str += " " + e.vscpData[3].toString(16)).substr(-2);                    {{{newline}}}                         if ( e.vscpData.length > 4 ) str += " " + ("00" + e.vscpData[4].toString(16)).substr(-2);  {{{newline}}}                         if ( e.vscpData.length > 5 ) str += " " + ("00" + e.vscpData[5].toString(16)).substr(-2);  {{{newline}}}                         if ( e.vscpData.length > 6 ) str += " " + ("00" + e.vscpData[6].toString(16)).substr(-2);  {{{newline}}}                         if ( e.vscpData.length > 7 ) str += " " + ("00" + e.vscpData[7].toString(16)).substr(-2);  {{{newline}}}                         return str;                      }

template:
  {{{lbl-start}}}Sequence no : {{{lbl-end}}} {{{val-start}}}{{{seqno}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Data : {{{lbl-end}}} {{{val-start}}}{{{data}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  capability: function() { return (("0000" + (e.vscpData[0]&&8 +  {{{newline}}}                                                  e.vscpData[1]).toString(16)).substr(-4) ); },    {{{newline}}}                 ipv4: function() {                                                                {{{newline}}}                     let str = e.vscpData[2].toString() + "." +                          {{{newline}}}                               e.vscpData[3].toString() + "." +                          {{{newline}}}                               e.vscpData[4].toString() + "." +                          {{{newline}}}                               e.vscpData[5].toString();                                           {{{newline}}}                     return str; },                                                                {{{newline}}}                 port: function() { return (e.vscpData[6]&&8 +                             {{{newline}}}                                            e.vscpData[6]); }                                      {{{newline}}}

template:
  {{{lbl-start}}}Server caps : {{{lbl-end}}} {{{val-start}}}{{{capability}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}IPv4 : {{{lbl-end}}} {{{val-start}}}{{{ipv4}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Port : {{{lbl-end}}} {{{val-start}}}{{{port}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  nickname: function() { return (e.vscpData[0]) };  {{{newline}}}                     register: function() { return (e.vscpData[1]) };  {{{newline}}}

template:
  {{{lbl-start}}}Node id : {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Register : {{{lbl-end}}} {{{val-start}}}{{{register}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:aW5kZXg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKGUudnNjcERhdGFbMF0mYW1wOyZhbXA7OCArIGUudnNjcERhdGFbMV0pIH07CiAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24oKSB7IAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gXCJbMF09XCIgICsgKFwiMDBcIiArIGUudnNjcERhdGFbMV0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsgXCIgJ1wiICsgIFN0cmluZy5mcm9tQ2hhckNvZGUoZS52c2NwRGF0YVsxXSkgKyBcIidcIiA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnZzY3BEYXRhLWxlbmd0aCA+IDMpIHN0ciArPSBcIiBcIiArIChcIjAwXCIgKyBlLnZzY3BEYXRhWzJdLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKSArIFwiICdcIiArICBTdHJpbmcuZnJvbUNoYXJDb2RlKGUudnNjcERhdGFbMl0pICsgXCInXCIgOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS52c2NwRGF0YS1sZW5ndGggPiA0KSBzdHIgKz0gXCIgXCIgKyAoXCIwMFwiICsgZS52c2NwRGF0YVszXS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKyBcIiAnXCIgKyAgU3RyaW5nLmZyb21DaGFyQ29kZShlLnZzY3BEYXRhWzNdKSArIFwiJ1wiIDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudnNjcERhdGEtbGVuZ3RoID4gNSkgc3RyICs9IFwiIFwiICsgKFwiMDBcIiArIGUudnNjcERhdGFbNF0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsgXCIgJ1wiICsgIFN0cmluZy5mcm9tQ2hhckNvZGUoZS52c2NwRGF0YVs0XSkgKyBcIidcIiA7IAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS52c2NwRGF0YS1sZW5ndGggPiA2KSBzdHIgKz0gXCIgXCIgKyAoXCIwMFwiICsgZS52c2NwRGF0YVs1XS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKyBcIiAnXCIgKyAgU3RyaW5nLmZyb21DaGFyQ29kZShlLnZzY3BEYXRhWzVdKSArIFwiJ1wiIDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudnNjcERhdGEtbGVuZ3RoID4gNykgc3RyICs9IFxcIiBcXCIgKyAoXFwiMDBcXCIgKyBlLnZzY3BEYXRhWzZdLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKSArIFxcIiAnXFwiICsgIFN0cmluZy5mcm9tQ2hhckNvZGUoZS52c2NwRGF0YVs2XSkgKyBcXCInXFwiIDs=

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Data : {{{lbl-end}}} {{{val-start}}}{{{data}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  size: function() { return (e.vscpData[0]) };                                   {{{newline}}}                     offset: function() { return (e.vscpData[1]) };                                 {{{newline}}}                     page-start: function() { return (e.vscpData[2]&&8 + e.vscpData[3]) };  {{{newline}}}                     page-end: function() { return (e.vscpData[4]&&8 + e.vscpData[5]) };    {{{newline}}}                     row-size: function() { return (e.vscpData[6]) };

template:
  {{{lbl-start}}}Size : {{{lbl-end}}} {{{val-start}}}{{{size}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Offset : {{{lbl-end}}} {{{val-start}}}{{{offset}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Page start [opt] : {{{lbl-end}}} {{{val-start}}}{{{page-start}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Page end [opt] : {{{lbl-end}}} {{{val-start}}}{{{page-end}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}LII Row size [opt] : {{{lbl-end}}} {{{val-start}}}{{{row-size}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:aW5kZXg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKGUudnNjcERhdGFbMF0mYW1wOyZhbXA7OCArIGUudnNjcERhdGFbMV0pIH07CiAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24oKSB7IAogICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gXCJbMF09XCIgICsgKFwiMDBcIiArIGUudnNjcERhdGFbMV0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsgXCIgJ1wiICsgIFN0cmluZy5mcm9tQ2hhckNvZGUoZS52c2NwRGF0YVsxXSkgKyBcIidcIiA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnZzY3BEYXRhLWxlbmd0aCA+IDMpIHN0ciArPSBcIiBcIiArIChcIjAwXCIgKyBlLnZzY3BEYXRhWzJdLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKSArIFwiICdcIiArICBTdHJpbmcuZnJvbUNoYXJDb2RlKGUudnNjcERhdGFbMl0pICsgXCInXCIgOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS52c2NwRGF0YS1sZW5ndGggPiA0KSBzdHIgKz0gXCIgXCIgKyAoXCIwMFwiICsgZS52c2NwRGF0YVszXS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKyBcIiAnXCIgKyAgU3RyaW5nLmZyb21DaGFyQ29kZShlLnZzY3BEYXRhWzNdKSArIFwiJ1wiIDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudnNjcERhdGEtbGVuZ3RoID4gNSkgc3RyICs9IFwiIFwiICsgKFwiMDBcIiArIGUudnNjcERhdGFbNF0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsgXCIgJ1wiICsgIFN0cmluZy5mcm9tQ2hhckNvZGUoZS52c2NwRGF0YVs0XSkgKyBcIidcIiA7IAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS52c2NwRGF0YS1sZW5ndGggPiA2KSBzdHIgKz0gXCIgXCIgKyAoXCIwMFwiICsgZS52c2NwRGF0YVs1XS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKyBcIiAnXCIgKyAgU3RyaW5nLmZyb21DaGFyQ29kZShlLnZzY3BEYXRhWzVdKSArIFwiJ1wiIDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudnNjcERhdGEtbGVuZ3RoID4gNykgc3RyICs9IFwiIFwiICsgKFwiMDBcIiArIGUudnNjcERhdGFbNl0udG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpICsgXCIgJ1wiICsgIFN0cmluZy5mcm9tQ2hhckNvZGUoZS52c2NwRGF0YVs2XSkgKyBcIidcIiA7

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Data : {{{lbl-end}}} {{{val-start}}}{{{data}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  nickname: function() { return e.vscpData[0]) };                                          {{{newline}}}                     page: function() { return (e.vscpData[1]&&8 + e.vscpData[2]) };                  {{{newline}}}                     register: function() { return e.vscpData[3]) };                                          {{{newline}}}                     count: function() { if (e.vscpData[3].length>3) return e.vscpData[4]) else return 1; };  {{{newline}}}

template:
  {{{lbl-start}}}Node id : {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Page : {{{lbl-end}}} {{{val-start}}}{{{page}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Register : {{{lbl-end}}} {{{val-start}}}{{{register}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Count : {{{lbl-end}}} {{{val-start}}}{{{count}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  nickname: function() { return e.vscpData[0]) };                          {{{newline}}}                     page: function() { return (e.vscpData[1]&&8 + e.vscpData[2]) };  {{{newline}}}                     register: function() { return e.vscpData[3]) };                          {{{newline}}}                     content: function() { return e.vscpData[4]) };                           {{{newline}}}                     content1: function() { (e.vscpData[5].length>4) return e.vscpData[5]) }; {{{newline}}}                     content2: function() { (e.vscpData[6].length>5) return e.vscpData[6]) }; {{{newline}}}                     content3: function() { (e.vscpData[7].length>6) return e.vscpData[7]) }; {{{newline}}}

template:
  {{{lbl-start}}}Node id : {{{lbl-end}}} {{{val-start}}}{{{nickname}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Page : {{{lbl-end}}} {{{val-start}}}{{{page}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Register : {{{lbl-end}}} {{{val-start}}}{{{register}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Count : {{{lbl-end}}} {{{val-start}}}{{{count}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:aW5kZXg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVswXSkgfTsKICAgICAgICAgICAgICAgICAgICBjbGFzc2JpdDk6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVsxXSkgfTsKICAgICAgICAgICAgICAgICAgICBmbGFnMTogZnVuY3Rpb24oKSB7IGlmIChlLnZzY3BEYXRhWzFdICZhbXA7IDgpIHJldHVybiAmcXVvdDstIGFsbCB0eXBlcyZxdW90OyBlbHNlICZxdW90Oy0gb25lIHR5cGUmcXVvdDsgfTsKICAgICAgICAgICAgICAgICAgICBmbGFnMjogZnVuY3Rpb24oKSB7IGlmIChlLnZzY3BEYXRhWzFdICZhbXA7IDE2KSByZXR1cm4gJnF1b3Q7LSBhbGwgdHlwZXMmcXVvdDsgZWxzZSAmcXVvdDstIG9uZSB0eXBlJnF1b3Q7IH07CiAgICAgICAgICAgICAgICAgICAgZmxhZzM6IGZ1bmN0aW9uKCkgeyBpZiAoZS52c2NwRGF0YVsxXSAmYW1wOyAzMikgcmV0dXJuICZxdW90Oy0gYWxsIHR5cGVzJnF1b3Q7IGVsc2UgJnF1b3Q7LSBvbmUgdHlwZSZxdW90OyB9OwogICAgICAgICAgICAgICAgICAgIGNsYXNzMTogZnVuY3Rpb24oKSB7IGlmIChlLnZzY3BEYXRhLmxlbmd0aCA+IDIpIHJldHVybiBlLnZzY3BEYXRhWzJdKSB9OwogICAgICAgICAgICAgICAgICAgIHR5cGUxOiBmdW5jdGlvbigpIHsgaWYgKGUudnNjcERhdGEubGVuZ3RoID4gMykgcmV0dXJuICgoZS52c2NwRGF0YVsxXSAmYW1wOyAxKSo1MTIgKyBlLnZzY3BEYXRhWzNdKSB9OwogICAgICAgICAgICAgICAgICAgIGNsYXNzMjogZnVuY3Rpb24oKSB7IGlmIChlLnZzY3BEYXRhLmxlbmd0aCA+IDQpIHJldHVybiBlLnZzY3BEYXRhWzRdKSB9OwogICAgICAgICAgICAgICAgICAgIHR5cGUyOiBmdW5jdGlvbigpIHsgaWYgKGUudnNjcERhdGEubGVuZ3RoID4gNSkgcmV0dXJuICgoZS52c2NwRGF0YVsxXSAmYW1wOyAyKSo1MTIgKyBlLnZzY3BEYXRhWzVdKSB9OwogICAgICAgICAgICAgICAgICAgIGNsYXNzMzogZnVuY3Rpb24oKSB7IGlmIChlLnZzY3BEYXRhLmxlbmd0aCA+IDYpIHJldHVybiBlLnZzY3BEYXRhWzZdKSB9OwogICAgICAgICAgICAgICAgICAgIHR5cGUzOiBmdW5jdGlvbigpIHsgaWYgKGUudnNjcERhdGEubGVuZ3RoID4gNykgcmV0dXJuICgoZS52c2NwRGF0YVsxXSAmYW1wOyA0KSo1MTIgKyBlLnZzY3BEYXRhWzddKSB9Ow==

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Class bits : {{{lbl-end}}} {{{val-start}}}{{{classbit9}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Class 1 : {{{lbl-end}}} {{{val-start}}}{{{class1}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Type 1 : {{{lbl-end}}} {{{val-start}}}{{{type1}}}{{{flag1}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Class 2 : {{{lbl-end}}} {{{val-start}}}{{{class2}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Type 2 : {{{lbl-end}}} {{{val-start}}}{{{type2}}}{{{flag2}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Class 3 : {{{lbl-end}}} {{{val-start}}}{{{class3}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Type 3 : {{{lbl-end}}} {{{val-start}}}{{{type3}}}{{{flag3}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  alarm:      : function() { return (e.vscpData[0]); } {{{newline}}}                     state       : function() { if (e.vscpData[0]) return " - ON" else return " - OFF" } {{{newline}}}                     zone:       : function() { return (e.vscpData[1]); } {{{newline}}}                     subzone:    : function() { return (e.vscpData[2]); } {{{newline}}}

template:
  {{{lbl-start}}}Index: {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{state}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone: {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone: {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  alarm:      : function() { return (e.vscpData[0]); } {{{newline}}}                     state       : function() { return ("00000000" + e.vscpData[0].toString(2)).substr(-8) } {{{newline}}}                     zone:       : function() { return (e.vscpData[1]); } {{{newline}}}                     subzone:    : function() { return (e.vscpData[2]); } {{{newline}}}

template:
  {{{lbl-start}}}Alarm: {{{lbl-end}}} {{{val-start}}}{{{alarm}}}{{{state}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone: {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone: {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  index:      : function() { return (e.vscpData[0]); } {{{newline}}}                     zone:       : function() { return (e.vscpData[1]); } {{{newline}}}                     subzone:    : function() { return (e.vscpData[2]); } {{{newline}}}

template:
  {{{lbl-start}}}Index: {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone: {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone: {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  userdef:    : function() { return (e.vscpData[0]); } {{{newline}}}                     zone:       : function() { return (e.vscpData[1]); } {{{newline}}}                     subzone:    : function() { return (e.vscpData[2]); } {{{newline}}}

template:
  {{{lbl-start}}}User defined: {{{lbl-end}}} {{{val-start}}}{{{userdef}}}{{{state}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone: {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone: {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}


type: vscpworks
template:
  {{{lbl-start}}}Unit: {{{lbl-end}}} = {{{unitstr}}} [{{{unit}}}]{{{newline}}}                  {{{lbl-start}}}Sensorindex: {{{lbl-end}}} = {{{sensorindex}}}{{{newline}}}                  {{{lbl-start}}}Value: {{{lbl-end}}} = {{{val}}}{{{symbol}}}{{{newline}}}                 {{{lbl-start}}}Coding: {{{lbl-end}}} = {{{datacodingstr}}} [{{{datacoding}}}]{{{newline}}}


type: vscpworks
template:
  {{{lbl-start}}}Unit: {{{lbl-end}}} = {{{unitstr}}} [{{{unit}}}]{{{newline}}}                     {{{lbl-start}}}Sensorindex: {{{lbl-end}}} = {{{sensorindex}}}{{{newline}}}                     {{{lbl-start}}}Value: {{{lbl-end}}} = {{{val}}}{{{symbol}}}{{{newline}}}                     {{{lbl-start}}}Coding: {{{lbl-end}}} = {{{datacodingstr}}} [{{{datacoding}}}]{{{newline}}}


type: vscpworks
template:
  {{{lbl-start}}}Unit: {{{lbl-end}}} = {{{unitstr}}} [{{{unit}}}]{{{newline}}}                          {{{lbl-start}}}Sensorindex: {{{lbl-end}}} = {{{sensorindex}}}{{{newline}}}                          {{{lbl-start}}}Value: {{{lbl-end}}} = {{{val}}}{{{symbol}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:c3RhdGViaXRzOiBmdW5jdGlvbigpIHsgcmV0dXJuIGUudnNjcERhdGFbMF0gJmFtcDsgNzsgfSwKICAgICAgICAgICAgICAgICAgICBzdGF0ZXR4dDogZnVuY3Rpb24oKSB7IAogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goIGUudnNjcERhdGFbMF0gJmFtcDsgNyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiQnV0dG9uIHJlbGVhc2VkXCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkJ1dHRvbiBwcmVzc2VkXCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkJ1dHRvbiBrZXlcIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkJ1dHRvbiB1bmtub3duIHN0YXRlXCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHJlcGVhdHM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKCBlLnZzY3BEYXRhWzBdICZsdDsmbHQ7IDMgJmFtcDsgMHgxZik7IH0sCiAgICAgICAgICAgICAgICAgICAgem9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzFdOyB9LAogICAgICAgICAgICAgICAgICAgIHN1YnpvbmU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVsyXTsgfSwKICAgICAgICAgICAgICAgICAgICBidXR0b25fY29kZTogZnVuY3Rpb24oKSB7IHJldHVybiAoZS52c2NwRGF0YVszXSAmbHQ7Jmx0OyA4ICsgZS52c2NwRGF0YVs0XSk7IH0sCiAgICAgICAgICAgICAgICAgICAgYnV0dG9uX2NvZGVfcGFnZTogZnVuY3Rpb24oKSB7IGlmICggZS52c2NwRGF0YSAmZ3Q7PSA3ICkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZS52c2NwRGF0YVs1XSAmbHQ7Jmx0OyA4ICsgZS52c2NwRGF0YVs2XSk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIk5vIGNvZGUtcGFnZVwiOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ==

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}{{{newline}}}                     {{{lbl-start}}}State : {{{lbl-end}}} {{{val-start}}}{{{statetxt}}} [{{{statebits}}}]{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Repeats : {{{lbl-end}}} {{{val-start}}}{{{repeats}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}button_code : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}button_code_page : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:ICAgICAgICAgICAgICAgICAgICB0eXBlOiBmdW5jdGlvbigpIHsgcmV0dXJuIGUudnNjcERhdGFbMF07IH0KICAgICAgICAgICAgICAgICAgICB0eXBldHh0OiBmdW5jdGlvbigpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCggZS52c2NwRGF0YVswXSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiQWJzb2x1dGUgY29vcmRpbmF0ZXNcIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiUmVsYXRpdmUgY29vcmRpbmF0ZXNcIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5rbm93biBjb29yZGluYXRlIGNvZGluZ1wiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHpvbmU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVsxXTsgfSwKICAgICAgICAgICAgICAgICAgICBzdWJ6b25lOiBmdW5jdGlvbigpIHsgcmV0dXJuIGUudnNjcERhdGFbMl07IH0sCiAgICAgICAgICAgICAgICAgICAgY29vcmluYXRlX3g6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKGUudnNjcERhdGFbM10gJmx0OyZsdDsgOCArIGUudnNjcERhdGFbNF0pOyB9CiAgICAgICAgICAgICAgICAgICAgY29vcmluYXRlX3k6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKGUudnNjcERhdGFbNV0gJmx0OyZsdDsgOCArIGUudnNjcERhdGFbNl0pOyB9

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}{{{newline}}}                     {{{lbl-start}}}Type : {{{lbl-end}}} {{{val-start}}}{{{typetxt}}} [{{{type}}}]{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}x-coordinates : {{{lbl-end}}} {{{val-start}}}{{{coorinate_x}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}y-coordinates : {{{lbl-end}}} {{{val-start}}}{{{coorinate_y}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }    {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }    {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     Turned off{{{newline}}}{{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }    {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}

template:
  {{{lbl-start}}}Userbyte : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     Is alive{{{newline}}}{{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Userbyte : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}

template:
[cell repeats an earlier one in this file: 314 characters]


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }   {{{newline}}}                     zone: function() { return e.vscpData[1]; }    {{{newline}}}                     subzone: function() { return e.vscpData[2]; } {{{newline}}}

template:
[cell repeats an earlier one in this file: 314 characters]


type: vscpworks
variables:
  BASE64:aW5kZXg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVswXTsgfSwKICAgICAgICAgICAgICAgICAgICBkYXRhOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHN0cjsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0xO2kmbHQ7ZS52c2NwRGF0YS5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS52c2NwRGF0YS5sZW5ndGg+MSkgb3V0c3RyICs9IChcIjAwXCIgKyBlLnZzY3BEYXRhW2ldLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC0yKSArIFwiIFwiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBvdXRzdHIgKz0gXCInXCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0xO2kmbHQ7ZS52c2NwRGF0YS5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS52c2NwRGF0YS5sZW5ndGg+MSkgb3V0c3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS52c2NwRGF0YVtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgb3V0c3RyICs9IFwiJ1wiOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHN0cjsgCiAgICAgICAgICAgICAgICAgICAgfQ==

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Data : {{{lbl-end}}} {{{val-start}}}{{{data}}}{{{val-end}}}{{{newline}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:[encoded data, 5776 characters]

template:
  {{{lbl-start}}}Event code : {{{lbl-end}}} {{{val-start}}}{{{eventcodetxt}}} [{{{eventcode}}}]{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Type : {{{lbl-end}}} {{{val-start}}}{{{typecodetxt}}} [{{{typecode}}}]{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Frame : {{{lbl-end}}} {{{val-start}}}{{{frame}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Data : {{{lbl-end}}} {{{val-start}}}{{{data}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  BASE64:em9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzBdOyB9LAogICAgICAgICAgICAgICAgICAgIHN1YnpvbmU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVsxXTsgfSwKICAgICAgICAgICAgICAgICAgICBmcmFtZTogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzJdOyB9CiAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRzdHI7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MztpJmx0O2UudnNjcERhdGEubGVuZ3RoO2krKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudnNjcERhdGEubGVuZ3RoJmd0OzEpIG91dHN0ciArPSAoXCIwMFwiICsgZS52c2NwRGF0YVtpXS50b1N0cmluZygxNikpLnN1YnN0cigtMikgKyBcIiBcIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHN0cjsgCiAgICAgICAgICAgICAgICAgICAgfQ==

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Frame : {{{lbl-end}}} {{{val-start}}}{{{frame}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Data : {{{lbl-end}}} {{{val-start}}}{{{data}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  zone: function() { return e.vscpData[0]; }      {{{newline}}}                     subzone: function() { return e.vscpData[1]; }   {{{newline}}}                     frame: function() { return e.vscpData[2]; }     {{{newline}}}                     vscpclass: function() { (return e.vscpData[3] << 8 + e.vscpData[4]); }  {{{newline}}}                     vscptype: function() { return (e.vscpData[5] << 8 + e.vscpData[6]); }   {{{newline}}}

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Frame : {{{lbl-end}}} {{{val-start}}}{{{frame}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}VSCP class : {{{lbl-end}}} {{{val-start}}}{{{vscpclass}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}VSCP type : {{{lbl-end}}} {{{val-start}}}{{{vscptype}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  reserved: function() { return e.vscpData[0]; }   {{{newline}}}                     zone: function() { return e.vscpData[1]; }       {{{newline}}}                     subzone: function() { return e.vscpData[2]; }    {{{newline}}}

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}reserved : {{{lbl-end}}} {{{val-start}}}{{{reserved}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  reserved: function() { return e.vscpData[0]; }   {{{newline}}}                      zone: function() { return e.vscpData[1]; }       {{{newline}}}                     subzone: function() { return e.vscpData[2]; }    {{{newline}}}

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}reserved : {{{lbl-end}}} {{{val-start}}}{{{reserved}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  reserved: function() { return e.vscpData[0]; }   {{{newline}}}                     zone: function() { return e.vscpData[1]; }       {{{newline}}}                     subzone: function() { return e.vscpData[2]; }    {{{newline}}}                     from: function() { return e.vscpData[3]; }       {{{newline}}}                     to: function() { return e.vscpData[4]; }         {{{newline}}}

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}reserved : {{{lbl-end}}} {{{val-start}}}{{{reserved}}}{{{val-end}}}{{{newline}}}                     State change from {{{from}}} to {{{to}}} {{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  id: function() { return e.vscpData[0]; }       {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Action id : {{{lbl-end}}} {{{val-start}}}{{{id}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  BASE64:ZnJhbWU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVswXTsgfSAsCiAgICAgICAgICAgICAgICAgICAgem9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzFdOyB9LAogICAgICAgICAgICAgICAgICAgIHN1YnpvbmU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVsyXTsgfSAsCiAgICAgICAgICAgICAgICAgICAgZnJhbWVjb3VudDogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzJdOyB9CiAgICAgICAgICAgICAgICAgICAgZnJhbWVjb3VudHR4dDogZnVuY3Rpb24oKSB7IAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGUudnNjcERhdGFbMl0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIk5vdCB1c2VkXCI7IAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQ==

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Frame : {{{lbl-end}}} {{{val-start}}}{{{frame}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Frame count: {{{lbl-end}}} {{{val-start}}}{{{framecount}}} {{{framecounttxt}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  frame: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Frame : {{{lbl-end}}} {{{val-start}}}{{{frame}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  user: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     preset: function() { return e.vscpData[3]; }   {{{newline}}}

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}User : {{{lbl-end}}} {{{val-start}}}{{{user}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Preset code: {{{lbl-end}}} {{{val-start}}}{{{preset}}} {{{framecounttxt}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }    {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     preset: function() { return e.vscpData[3]; }   {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }    {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     cvalue: function() { return e.vscpData[3]; }   {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                      {{{lbl-start}}}Change value : {{{lbl-end}}} {{{val-start}}}{{{cvalue}}}{{{val-end}}}{{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         Long click{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         Single click{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         Double click{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}                     century: function() { return e.vscpData[3]; }   {{{newline}}}                     year: function() { return e.vscpData[4]; }      {{{newline}}}                     month: function() { return e.vscpData[5]; }     {{{newline}}}                     day: function() { return e.vscpData[6]; }       {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Date : {{{lbl-end}}}{{{century}}}{{{year}}}-{{{month}}}-{{{day}}} {{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}                     hour: function() { return e.vscpData[3]; }      {{{newline}}}                     minute: function() { return e.vscpData[4]; }    {{{newline}}}                     second: function() { return e.vscpData[5]; }    {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Time : {{{lbl-end}}} {{{val-start}}}{{{hour}}}:{{{minute}}}:{{{second}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  BASE64:aW5kZXg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVswXTsgfSwKICAgICAgICAgICAgICAgICAgICB6b25lOiBmdW5jdGlvbigpIHsgcmV0dXJuIGUudnNjcERhdGFbMV07IH0sCiAgICAgICAgICAgICAgICAgICAgc3Viem9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBlLnZzY3BEYXRhWzJdOyB9LAogICAgICAgICAgICAgICAgICAgIHdlZWtkYXk6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZS52c2NwRGF0YVszXTsgfSwKICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5c3RyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLnZzY3BEYXRhWzRdKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIk1vbmRheVwiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJUdWVzZGF5XCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIldlZG5lc2RheVwiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJUaHVyc2RheVwiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJGcmlkYXlcIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiU2F0dXJkYXlcIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiU3VuZGF5XCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgfQ==

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Weekday : {{{lbl-end}}} {{{val-start}}}{{{weekday}}} [{{{weekdaystr}}}]{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}                     sec     : e.vscpData[7] & 0x3f; },          {{{newline}}}                     minute  : function() { return((e.vscpData[6] << 8 + e.vscpData[7]) >> 6 & 0x3f); }   {{{newline}}}                     hour    : function() { return((e.vscpData[6] << 8 + e.vscpData[7]) >> 12 & 0x1f); }  {{{newline}}}                     day     : function() { return((e.vscpData[5] >> 1) & 0x1f); }                              {{{newline}}}                     month   : function() { return((e.vscpData[4] << 8 + e.vscpData[5]) >> 6 & 0x0f); }   {{{newline}}}                     year    : function() { return((e.vscpData[3] << 8 + e.vscpData[4]) >> 2 & 0xfff); }  {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{lbl-start}}}Date/Time : {{{lbl-end}}} {{{val-start}}}{{{year}}}-{{{month}}}-{{{day}}} {{{hour}}}:{{{minute}}}:{{{sec}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     value: function() {                            {{{newline}}}                         var rval = 0;                              {{{newline}}}                         for ( i=3;i<e.vscpData.length;i++) {    {{{newline}}}                             rval = val << 8;                 {{{newline}}}                             rval += e.vscpData[i];                 {{{newline}}}                           }                                          {{{newline}}}                         return rval;                               {{{newline}}}                      }                                              {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                      {{{lbl-start}}}Incremented value : {{{lbl-end}}} {{{val-start}}}{{{value}}}{{{val-end}}}{{{newline}}}                                        {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     value: function() {                            {{{newline}}}                         var rval = 0;                              {{{newline}}}                          for ( i=3;i<e.vscpData.length;i++) {    {{{newline}}}                             rval = val << 8;                 {{{newline}}}                             rval += e.vscpData[i];                 {{{newline}}}                         }                                          {{{newline}}}                         return rval;                               {{{newline}}}                     }                                              {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                      {{{lbl-start}}}Decremented value : {{{lbl-end}}} {{{val-start}}}{{{value}}}{{{val-end}}}{{{newline}}}                                        {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     proxlevel: function() { return e.vscpData[3]<<16 + e.vscpData[4]; }      {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                      {{{lbl-start}}}Proximity level : {{{lbl-end}}} {{{val-start}}}{{{proxlevel}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }       {{{newline}}}                     optstr: function() {                            {{{newline}}}                         if ( e.vscpData[0] )                        {{{newline}}}                             return "inactivate";          {{{newline}}}                         else                                        {{{newline}}}                             return "activate";            {{{newline}}}                      },                                             {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}

template:
  {{{lbl-start}}}Mute : {{{lbl-end}}} {{{val-start}}}{{{optstr}}} [{{{opt}}}]{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }       {{{newline}}}                     optstr: function() {                            {{{newline}}}                         if ( e.vscpData[0] )                        {{{newline}}}                             return "off";                 {{{newline}}}                         else                                        {{{newline}}}                             return "on";                  {{{newline}}}                      },                                             {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}

template:
  {{{lbl-start}}}All lamps : {{{lbl-end}}} {{{val-start}}}{{{optstr}}} [{{{opt}}}]{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }    {{{newline}}}                     subzone: function() { return e.vscpData[2]; } {{{newline}}}

template:
  {{{lbl-start}}}Option : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}

template:
  {{{lbl-start}}}Option : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 219 characters]

template:
  {{{lbl-start}}}Option : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                       {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}

template:
  {{{lbl-start}}}Interrupt level : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Option : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Option : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 219 characters]

template:
  {{{lbl-start}}}Dim lamps : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Channel : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Absolute level : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Relative level : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }       {{{newline}}}                     optstr: function() {                            {{{newline}}}                         if ( e.vscpData[0] )                        {{{newline}}}                             return "All";                 {{{newline}}}                         else                                        {{{newline}}}                             return "Specific";            {{{newline}}}                      },                                             {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}

template:
  {{{lbl-start}}}Req. message : {{{lbl-end}}} {{{val-start}}}{{{opt}}} {{{optstr}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables: index: function() { return e.vscpData[0]; }
template:
  {{{lbl-start}}}Sequence number : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 219 characters]

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }       {{{newline}}}                         zone: function() { return e.vscpData[1]; },     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}

template:
  {{{lbl-start}}}Sequence number : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                 {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     Bytes 3-7 is stream data                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Preset code : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                                         {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 222 characters]

template:
  {{{lbl-start}}}Option : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                        {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }       {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}                     control: function() { return e.vscpData[3]; }   {{{newline}}}                     timecode: function() { return e.vscpData[3] & 0x07 ; }  {{{newline}}}                     timecodestr: function() {                                   {{{newline}}}                         switch (e.vscpData[3] & 0x07) {                     {{{newline}}}                                                                                 {{{newline}}}                             case 0:                                             {{{newline}}}                                 return "Error: Invalid time code";    {{{newline}}}                                                                                 {{{newline}}}                             case 1:                                             {{{newline}}}                                 return "Microseconds";                {{{newline}}}                                                                                 {{{newline}}}                             case 2:                                             {{{newline}}}                                 return "Milliseconds";                {{{newline}}}                                                                                 {{{newline}}}                             case 3:                                             {{{newline}}}                                 return "Seconds";                     {{{newline}}}                                                                                   {{{newline}}}                             case 4:                                             {{{newline}}}                                 return "Minutes";                     {{{newline}}}                                                                                 {{{newline}}}                             case 5:                                             {{{newline}}}                                 return "Hours";                       {{{newline}}}                                                                                 {{{newline}}}                             default:                                            {{{newline}}}                                 return "Error: Invalid time code";    {{{newline}}}                         } ;                                                     {{{newline}}}                     }                                                           {{{newline}}}                     sendon: function() {                                        {{{newline}}}                         if ( e.vscpData[3] & 0x40 ) {                       {{{newline}}}                             return "yes";                             {{{newline}}}                         }                                                       {{{newline}}}                         else {                                                  {{{newline}}}                             return "no";                              {{{newline}}}                         }                                                       {{{newline}}}                     }                                                           {{{newline}}}                     sendoff: function() {                                       {{{newline}}}                         if ( e.vscpData[3] & 0x80 ) {                       {{{newline}}}                             return "yes";                             {{{newline}}}                         }                                                       {{{newline}}}                         else {                                                  {{{newline}}}                               return "no";                              {{{newline}}}                         }                                                       {{{newline}}}                     }                                                           {{{newline}}}                       time: function() { return (e.vscpData[4] && 24 +    {{{newline}}}                                                e.vscpData[5] && 16 +    {{{newline}}}                                                e.vscpData[6] && 8 +     {{{newline}}}                                                e.vscpData[7] ); }               {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                      {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Control : {{{lbl-end}}} {{{val-start}}}{{{control}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Send on event : {{{lbl-end}}} {{{val-start}}}{{{sendon}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Send off event : {{{lbl-end}}} {{{val-start}}}{{{sendoff}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Time : {{{lbl-end}}} {{{val-start}}}{{{time}}} {{{timecodestr}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }                      {{{newline}}}                     zone: function() { return e.vscpData[1]; }                     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }                  {{{newline}}}                     control: function() { return e.vscpData[3]; }                  {{{newline}}}                     timecode: function() { return e.vscpData[3] & 0x07 ; }     {{{newline}}}                     timecodestr: function() {                                      {{{newline}}}                         switch (e.vscpData[3] & 0x07) {                        {{{newline}}}                                                                                    {{{newline}}}                             case 0:                                                {{{newline}}}                                 return "Error: Invalid time code";       {{{newline}}}                                                                                    {{{newline}}}                             case 1:                                                {{{newline}}}                                 return "Microseconds";                   {{{newline}}}                                                                                    {{{newline}}}                             case 2:                                                {{{newline}}}                                 return "Milliseconds";                   {{{newline}}}                                                                                    {{{newline}}}                             case 3:                                                {{{newline}}}                                 return "Seconds";                        {{{newline}}}                                                                                    {{{newline}}}                             case 4:                                                {{{newline}}}                                 return "Minutes";                        {{{newline}}}                                                                                    {{{newline}}}                             case 5:                                                {{{newline}}}                                 return "Hours";                          {{{newline}}}                                                                                    {{{newline}}}                             default:                                               {{{newline}}}                                 return "Error: Invalid time code";       {{{newline}}}                         } ;                                                        {{{newline}}}                     }                                                              {{{newline}}}                     sendon: function() {                                           {{{newline}}}                         if ( e.vscpData[3] & 0x40 ) {                          {{{newline}}}                             return "yes";                                {{{newline}}}                         }                                                          {{{newline}}}                         else {                                                     {{{newline}}}                             return "no";                                 {{{newline}}}                         }                                                          {{{newline}}}                     }                                                              {{{newline}}}                     sendoff: function() {                                          {{{newline}}}                         if ( e.vscpData[3] & 0x80 ) {                          {{{newline}}}                             return "yes";                                {{{newline}}}                         }                                                          {{{newline}}}                         else {                                                     {{{newline}}}                             return "no";                                 {{{newline}}}                         }                                                          {{{newline}}}                     }                                                              {{{newline}}}                     time: function() { return (e.vscpData[4] && 24 +       {{{newline}}}                                                e.vscpData[5] && 16 +       {{{newline}}}                                                e.vscpData[6] && 8 +        {{{newline}}}                                                e.vscpData[7] ); }                  {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                        {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Control : {{{lbl-end}}} {{{val-start}}}{{{control}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Send on event : {{{lbl-end}}} {{{val-start}}}{{{sendon}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Send off event : {{{lbl-end}}} {{{val-start}}}{{{sendoff}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Time : {{{lbl-end}}} {{{val-start}}}{{{time}}} {{{timecodestr}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  country: function() { return e.vscpData[0]; }                     {{{newline}}}                     countrystr: function() {                                          {{{newline}}}                         switch(e.vscpData[0]) {                                       {{{newline}}}                                                                                       {{{newline}}}                             case 0:                                                   {{{newline}}}                                 return "User defined";                      {{{newline}}}                                                                                       {{{newline}}}                             case 1:                                                   {{{newline}}}                                 return "Error: ISO 639-1";                  {{{newline}}}                                                                                       {{{newline}}}                             case 2:                                                   {{{newline}}}                                 return "Error: ISO 639-1/T";                {{{newline}}}                                                                                       {{{newline}}}                             case 3:                                                   {{{newline}}}                                 return "Error: ISO 639-2/B";                {{{newline}}}                                                                                       {{{newline}}}                             case 4:                                                   {{{newline}}}                                 return "Error: ISO 639-3";                  {{{newline}}}                                                                                       {{{newline}}}                             case 5:                                                   {{{newline}}}                                 return "Error: IETF (RFC-5646/4647)";       {{{newline}}}                                                                                                  {{{newline}}}                             default:                                                  {{{newline}}}                                 return "Error: Undefined language code";    {{{newline}}}                         }                                                             {{{newline}}}                     }                                                                 {{{newline}}}                     zone: function() { return e.vscpData[1]; }                        {{{newline}}}                     subzone: function() { return e.vscpData[2]; }                     {{{newline}}}

template:
  {{{lbl-start}}}Country : {{{lbl-end}}} {{{val-start}}}{{{country}}} {{{countrystr}}}{{{val-end}}}{{{newline}}}                                {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}                     value: function() {                             {{{newline}}}                         var rval = 0;                               {{{newline}}}                         for ( i=3;i<e.vscpData.length;i++) {     {{{newline}}}                             rval = val << 8;                  {{{newline}}}                                            rval += e.vscpData[i];                  {{{newline}}}                         }                                           {{{newline}}}                         return rval;                                {{{newline}}}                     }                                               {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Change value : {{{lbl-end}}} {{{val-start}}}{{{value}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
[cell repeats an earlier one in this file: 225 characters]

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }    {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     pos: function() { return e.vscpData[3]; }      {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Position : {{{lbl-end}}} {{{val-start}}}{{{pos}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  index: function() { return e.vscpData[0]; }    {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     control: function() { return e.vscpData[3]; }  {{{newline}}}                     controlstr: function() {                       {{{newline}}}                         switch(e.vscpData[3] & 7) {            {{{newline}}}                                                                    {{{newline}}}                             case 0:                                {{{newline}}}                                 return "Microseconds";   {{{newline}}}                                                                    {{{newline}}}                             case 1:                                {{{newline}}}                                 return "Milliseconds";   {{{newline}}}                                                                    {{{newline}}}                             case 2:                                {{{newline}}}                                 return "Seconds";        {{{newline}}}                                                                    {{{newline}}}                             case 3:                                {{{newline}}}                                 return "Minutes";        {{{newline}}}                                                                    {{{newline}}}                             case 4:                                {{{newline}}}                                 return "Hours";          {{{newline}}}                                                                    {{{newline}}}                             case 5:                                {{{newline}}}                                 return "Days";           {{{newline}}}                                                                    {{{newline}}}                             default:                               {{{newline}}}                                 return "Error: User defined";  {{{newline}}}                         }                                           {{{newline}}}                                                                     {{{newline}}}                     }                                               {{{newline}}}                     time: function() {                              {{{newline}}}                         return return (e.vscpData[3] << 24 +  {{{newline}}}                                        e.vscpData[4] << 16 +  {{{newline}}}                                        e.vscpData[5] << 8 +   {{{newline}}}                                        e.vscpData[6] );             {{{newline}}}                     }                                               {{{newline}}}

template:
  {{{lbl-start}}}Index : {{{lbl-end}}} {{{val-start}}}{{{index}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Control : {{{lbl-end}}} {{{val-start}}}{{{control}}} {{{controlstr}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Time : {{{lbl-end}}} {{{val-start}}}{{{time}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }       {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}                     token: function() {                             {{{newline}}}                         var rval = 0;                               {{{newline}}}                         for ( i=3;i<e.vscpData.length;i++) {     {{{newline}}}                             rval = val << 8;                  {{{newline}}}                             rval += e.vscpData[i];                  {{{newline}}}                         }                                           {{{newline}}}                         return rval;                                {{{newline}}}                     }                                               {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Token : {{{lbl-end}}} {{{val-start}}}{{{token}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     token: function() {                            {{{newline}}}                         var rval = 0;                              {{{newline}}}                         for ( i=3;i<e.vscpData.length;i++) {    {{{newline}}}                             rval = val << 8;                 {{{newline}}}                             rval += e.vscpData[i];                 {{{newline}}}                         }                                          {{{newline}}}                         return rval;                               {{{newline}}}                     }                                              {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Token : {{{lbl-end}}} {{{val-start}}}{{{token}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  level: function() { return e.vscpData[0]; }     {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}

template:
  {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Level : {{{lbl-end}}} {{{val-start}}}{{{level}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     pin: function() {                              {{{newline}}}                         var rval = 0;                              {{{newline}}}                         for ( i=3;i<e.vscpData.length;i++) {    {{{newline}}}                             rval = val << 8;                 {{{newline}}}                             rval += e.vscpData[i];                 {{{newline}}}                         }                                          {{{newline}}}                         return rval;                               {{{newline}}}                     }                                              {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Pin : {{{lbl-end}}} {{{val-start}}}{{{pin}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }           {{{newline}}}                     zone: function() { return e.vscpData[1]; }          {{{newline}}}                     subzone: function() { return e.vscpData[2]; }       {{{newline}}}                     password: function() {                              {{{newline}}}                         var rval = "";                        {{{newline}}}                         for ( i=3;i<e.vscpData.length;i++) {         {{{newline}}}                             rval += String.fromCharCode(e.vscpData[i]); {{{newline}}}                         }                                               {{{newline}}}                         return rval;                                    {{{newline}}}                     }                                                   {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Password : {{{lbl-end}}} {{{val-start}}}{{{password}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }       {{{newline}}}                     zone: function() { return e.vscpData[1]; }      {{{newline}}}                     subzone: function() { return e.vscpData[2]; }   {{{newline}}}                     token: function() {                             {{{newline}}}                         var rval = 0;                               {{{newline}}}                         for ( i=3;i<e.vscpData.length;i++) {     {{{newline}}}                             rval = val << 8;                  {{{newline}}}                             rval += e.vscpData[i];                  {{{newline}}}                         }                                           {{{newline}}}                         return rval;                                {{{newline}}}                     }                                               {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Token : {{{lbl-end}}} {{{val-start}}}{{{pin}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }        {{{newline}}}                     zone: function() { return e.vscpData[1]; }       {{{newline}}}                     subzone: function() { return e.vscpData[2]; }    {{{newline}}}

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     value: function() {                         var rval = 0;                         for ( i=3;i<e.vscpData.length;i++) {                             rval = val << 8;                             rval += e.vscpData[i];                         }                         return rval;                     }

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Increment value : {{{lbl-end}}} {{{val-start}}}{{{value}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


type: vscpworks
variables:
  opt: function() { return e.vscpData[0]; }      {{{newline}}}                     zone: function() { return e.vscpData[1]; }     {{{newline}}}                     subzone: function() { return e.vscpData[2]; }  {{{newline}}}                     value: function() {                         var rval = 0;                         for ( i=3;i<e.vscpData.length;i++) {                             rval = val << 8;                             rval += e.vscpData[i];                         }                         return rval;                     }

template:
  {{{lbl-start}}}Opt : {{{lbl-end}}} {{{val-start}}}{{{opt}}}{{{val-end}}}{{{newline}}}                                    {{{lbl-start}}}Zone : {{{lbl-end}}} {{{val-start}}}{{{zone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Subzone : {{{lbl-end}}} {{{val-start}}}{{{subzone}}}{{{val-end}}}{{{newline}}}                     {{{lbl-start}}}Decrement value : {{{lbl-end}}} {{{val-start}}}{{{value}}}{{{val-end}}}{{{newline}}}                     {{{newline}}}


